使用python开发一个pdf合并工具 您所在的位置:网站首页 Python 制作pdf 使用python开发一个pdf合并工具

使用python开发一个pdf合并工具

#使用python开发一个pdf合并工具| 来源: 网络整理| 查看: 265

       老婆给女儿整理打印学习资料,希望能从很多个pdf中抽取一些页码来合并成一个文件,

就希望我能写一个程序来实现这个功能。刚好最近正在学习python,就用python开发了一个

pdf合并工具,也算是学以致用吧。

       界面如下:

       

       最多可以选取10个pdf文件,输入要合并的页码范围,最后会把选择的页码合并为一个文件。

       或者可以选择一个文件夹,合并其中所有pdf的所有页码为一个文件。

       由于时间紧,任务重,对python还有点生疏,所有界面功能难免简单粗暴,幼稚可笑, 还请多多包涵。

       系统界面用得是python 3.7.4版本自带的标准tkinter GUI工具包,提供了丰富的GUI组件,使用起来相当

方便,没有什么可以说的。

       要实现pdf合并功能,需要引入PyPDF2库。因为python 3.7.4版本自带了python 库的安装工具pip,所以

安装PyPDF2库也相当简单,联网情况下,直接命令行:pip install pypdf2 就好了。

       然后使用其中的pdfFileReader读取pdf,pdfFileWriter写入pdf,都非常直观简单,唯一要注意的是,pdf

文件的编码。python 3缺省的编码格式是utf-8,在合并gbk编码的pdf时,会报错:

 File "D:\Python\Python37\Lib\site-packages\PyPDF2\generic.py", line 484, in readFromStream

  return NameObject(name.decode('utf-8'))

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc8 in position 10: invalid continuation byte

      上网搜一把,很多人都遇到过这个问题,如 coderkkk的CSDN博客: 

      PyPDF2 编码问题 PyPDF2.utils.PdfReadError Illegal character in Name Object

       链接:https://blog.csdn.net/kmesky/article/details/102695520

       修改generic.py 484行,加上except出错时尝试gbk编码:

 

        然后同时修改Lib/site-packages/PyPDF2/utils.py 第238行,加上utf-8的编码:

         

          看博客的回复,这个修改解决了别人的问题。但是在我这里却无法成功。尝试把第一个文件的gbk改为big5,bg2312,也尝试给第二个文件加上big5,等等其它编码方式,但是始终报那个错误。

           实在无计可施了,心想既然utils.py中原来就是用latin-1的编码,那generic.py也用latin-1的编码,不就可以了么?反正

合并pdf是按页进行的,文本名称编码应该涉及不到。这样修改之后,utils.py都不用改,竟然合并成功了!!!

       到这来功能已经完成了,但是老婆不会运行py文件,所以还得打包成exe给她用。好在python的打包库使用起来很方便,比

java打包exe还简单。同样pip install pyinstaller,安装完成后,命令行执行:

 pyinstaller -F -w -i c:/users/dumbbellyang/Desktop/pdfMerger.ico c:/users/dumbbellyang/Desktop/pdfMerger.py

 其中-F表示打包成一个文件,w表示windows应用,隐藏python的命令行窗口,i表示icon文件路径,最后是python代码文件。

 执行完成后,就会生成一个exe:

代码是使用python自带的集成开发环境IDLE,缺省是没有代码行显示的,而且白色的背景看起来也很不舒服,

所以就上网搜了下显示代码行及改变背景的方法:

改变背景很简单:D:\Python\Python37\Lib\idlelib\config-highlight.def 配置文件中添加:

[Obsidian] definition-foreground = #678CB1 error-foreground = #FF0000 string-background = #293134 keyword-foreground = #93C763 normal-foreground = #E0E2E4 comment-background = #293134 hit-foreground = #E0E2E4 builtin-background = #293134 stdout-foreground = #678CB1 cursor-foreground = #E0E2E4 break-background = #293134 comment-foreground = #66747B hilite-background = #2F393C hilite-foreground = #E0E2E4 definition-background = #293134 stderr-background = #293134 hit-background = #000000 console-foreground = #E0E2E4 normal-background = #293134 builtin-foreground = #E0E2E4 stdout-background = #293134 console-background = #293134 stderr-foreground = #FB0000 keyword-background = #293134 string-foreground = #EC7600 break-foreground = #E0E2E4 error-background = #293134

[tango] definition-foreground = #fce94f error-foreground = #fa8072 string-background = #2e3436 keyword-foreground = #8cc4ff normal-foreground = #ffffff comment-background = #2e3436 hit-foreground = #ffffff break-foreground = #000000 builtin-background = #2e3436 stdout-foreground = #eeeeec cursor-foreground = #fce94f hit-background = #2e3436 comment-foreground = #73d216 hilite-background = #edd400 definition-background = #2e3436 stderr-background = #2e3436 break-background = #2e3436 console-foreground = #87ceeb normal-background = #2e3436 builtin-foreground = #ad7fa8 stdout-background = #2e3436 console-background = #2e3436 stderr-foreground = #ff3e40 keyword-background = #2e3436 string-foreground = #e9b96e hilite-foreground = #2e3436 error-background = #2e3436

然后在IDLE的菜单Options->Config IDLE 的highlights tab中选择:

代码添加行号,要引入一个IDLE的扩展IDLEX,下载:

http://idlex.sourceforge.net/extensions.html

解压后,把LineNumbers.py从idlex-1.18\idlex-1.18\idlexlib\extensions 目录复制到python IDLE目录:

 Python37\Lib\idlelib,并修改64和65行:

from idlelib.Delegator import Delegator from idlelib.Percolator import Percolator

为:

from idlelib.delegator import Delegator from idlelib.dercolator import Percolator

同时把configHandler.py 从idlex-1.18\idlex-1.18\idlexlib\idlefork\idlelib 目录复制到python安装路径下的

IDLE目录:Python37\Lib\idlelib

然后在同目录下config-extensions.def文件中加入LineNumbers的配置:

[LineNumbers] enable=1 enable_editor=1 enable_shell=0 visible=1 [LineNumbers_cfgBindings] linenumbers-show =True

重新打开IDLE,你会发现,背景已修改,代码行已经显示:

 代码已经上传:https://download.csdn.net/download/yangdanbo1975/12112329



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有